package com.feng.common.utils;

import com.feng.common.config.FileConfig;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * @author Feng
 * @since 2022/4/24 19:45
 */

public class FileUtil {

    /**
     * 上传文件
     *
     * @param file 需要上传的文件
     * @return 文件访问路径
     */
    public static String uploadFile(MultipartFile file) {
        if (file.isEmpty()) {
            Asserts.fail("上传空文件");
        }
        //所上传文件的文件名
        String fileName = file.getOriginalFilename();
        // 后缀
        String suffixName = getExtensionName(fileName);
        //生成文件名称通用方法: "日期_时间_随机数_上传者用户ID.后缀"
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
        Long userId = SecurityUtil.getCurrentUserDetails().getUser().getUserId();
        String newFileName = sdf.format(new Date()) + "_" + new Random().nextInt(100) + "_" + userId + "." + suffixName;
        try {
            // 保存文件
            byte[] bytes = file.getBytes();
            Path path = Paths.get(FileConfig.WRITE_PATH + newFileName);
            Files.write(path, bytes);
        } catch (IOException e) {
            Asserts.fail("文件上传失败");
        }
        return FileConfig.ACCESS_PATH + newFileName;
    }

    /**
     * 获取文件扩展名，不带 .
     */
    private static String getExtensionName(String filename) {
        if ((filename != null) && (filename.length() > 0)) {
            int dot = filename.lastIndexOf('.');
            if ((dot > -1) && (dot < (filename.length() - 1))) {
                return filename.substring(dot + 1);
            }
        }
        return filename;
    }
}
